package gerencia;

import java.io.FileNotFoundException;
import java.util.Iterator;

import persistencia.GerenciadorSalas;

import descricoes.*;

/**
 * Classe que gerencia salas
 * 
 * @author Grupo 3
 * 
 */
public class GrSalas {
	private GerenciadorSalas grSalas;

	/**
	 * Construtor da classe GrSalas
	 */
	public GrSalas() {
		grSalas = GerenciadorSalas.getInstance();
	}

	/**
	 * Adiciona uma sala ao banco de dados (sem o parametro aberto - valido
	 * apenas para Laboratorios)
	 * 
	 * @param finalidade
	 *            A finalidade da sala
	 * @param ID
	 *            A identificacao da sala
	 * @param capacidade
	 *            A capacidade da sala
	 * @param tipo
	 *            O tipo da sala
	 * @throws Exception 
	 **/

	public void addSala(String finalidade, String ID, int capacidade,
			String tipo) throws Exception {
		addSala(finalidade, ID, capacidade, tipo, "", false);
	}

	/**
	 * Adiciona uma sala ao banco de dados
	 * 
	 * @param finalidade
	 *            A finalidade da sala
	 * @param ID
	 *            A identificacao da sala
	 * @param capacidade
	 *            A capacidade da sala
	 * @param tipo
	 *            O tipo da sala
	 * @param apelido
	 *            O apelido da sala
	 * @param aberto
	 *            Um boolean que indica se o laboratorio eh aberto ou nao, no caso de ser um laboratorio
	 * @throws Exception 
	 **/
	public void addSala(String finalidade, String ID, int capacidade,
			String tipo, String apelido, boolean aberto)
			throws Exception {
		Sala novaSala = Sala.getSala(finalidade,ID, capacidade,tipo,apelido,aberto);
		if (novaSala != null) {
			addSala(novaSala);
		}
	}

	/**
	 * Adiciona uma sala ao banco de dados
	 * 
	 * @param salaAdd
	 *            A sala a ser adicionada
	 * @throws FileNotFoundException
	 *             Caso o arquivo nao seja encontrado
	 */
	public void addSala(Sala salaAdd) throws FileNotFoundException {
		if ((localizaSala(salaAdd.getID())) == null) {
			grSalas.adicionaObjeto(salaAdd);
		} else {
			throw new IllegalArgumentException(
					"Ja existe sala com esta identificacao.");
		}

	}

	/**
	 * Localiza uma sala, dada a sua identificacao
	 * 
	 * @param id
	 *            A identificacao da sala
	 * @return A sala(caso exista)
	 * @throws FileNotFoundException
	 */
	public Sala localizaSala(String id) throws FileNotFoundException {
		Iterator<Sala> it = grSalas.carregarDados().iterator();
		while (it.hasNext()) {
			Sala sala = it.next();
			if (sala.getID().equals(id))
				return sala;
		}

		return null;
	}

	/**
	 * Remove uma sala do banco de dados
	 * 
	 * @param salaRemover
	 *            A sala a remover
	 */
	public void removerSala(Sala salaRemover) {
		grSalas.removeObjeto(salaRemover);
	}

	/**
	 * Retorna um atributo de uma sala
	 * 
	 * @param id
	 *            A identificacao da sala
	 * @param atributo
	 *            O atributo da sala
	 * @return Uma string equivalente ao parametro desejado
	 * @throws Exception
	 *             Caso a sala nao exista
	 */
	public String getAtributo(String id, String atributo) throws Exception {
		Sala sala = localizaSala(id);
		if (sala == null) {
			throw new IllegalArgumentException("Sala nao existe.");
		}
		if (sala.getFinalidade().equals("Escritorio")
				&& atributo.equals("tipo"))
			throw new IllegalArgumentException("Atributo invalido");
		if (atributo.equals("finalidade"))
			return sala.getFinalidade();
		if (atributo.equals("apelido"))
			return sala.getApelido();
		if (atributo.equals("tipo"))
			return sala.getTipo();
		if (atributo.equals("capacidade"))
			return String.valueOf(sala.getCapacidade());
		return "";
	}

}
